{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8.3+52.g2758dc7.dirty\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import folium\n",
    "\n",
    "\n",
    "print(folium.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Turkish</td>\n",
       "      <td>(39.8667, 32.8667)</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Tiwi</td>\n",
       "      <td>(-11.6308, 130.94899999999998)</td>\n",
       "      <td>22</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Liberia Kpelle</td>\n",
       "      <td>(6.92048, -9.96128)</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tulu</td>\n",
       "      <td>(12.8114, 75.2651)</td>\n",
       "      <td>24</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         language                     coordinates  consonants  vowels\n",
       "0         Turkish              (39.8667, 32.8667)          25       8\n",
       "1          Korean                   (37.5, 128.0)          21      11\n",
       "2            Tiwi  (-11.6308, 130.94899999999998)          22       4\n",
       "3  Liberia Kpelle             (6.92048, -9.96128)          22      12\n",
       "4            Tulu              (12.8114, 75.2651)          24      13"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas\n",
    "import ast\n",
    "\n",
    "\n",
    "data = pandas.read_csv(\n",
    "    'data' + os.path.sep + 'consonants_vowels.csv',\n",
    "    # To ensure that tuples are read as tuples\n",
    "    converters={'coordinates': ast.literal_eval}\n",
    ")\n",
    "\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Charts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import io\n",
    "\n",
    "\n",
    "pie_charts_data = zip(data.consonants, data.vowels)\n",
    "\n",
    "fig = plt.figure(figsize=(0.5, 0.5))\n",
    "fig.patch.set_alpha(0)\n",
    "ax = fig.add_subplot(111)\n",
    "plots = []\n",
    "for sizes in pie_charts_data:\n",
    "    ax.pie(sizes, colors=('#e6194b', '#19e6b4'))\n",
    "    buff = io.StringIO()\n",
    "    plt.savefig(buff, format='SVG')\n",
    "    buff.seek(0)\n",
    "    svg = buff.read()\n",
    "    svg = svg.replace('\\n', '')\n",
    "    plots.append(svg)\n",
    "    plt.cla()\n",
    "plt.clf()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Legend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import branca\n",
    "\n",
    "\n",
    "legend_html = '''\n",
    "{% macro html(this, kwargs) %}\n",
    "<div style=\"\n",
    "    position: fixed; \n",
    "    bottom: 50px;\n",
    "    left: 50px;\n",
    "    width: 250px;\n",
    "    height: 80px;\n",
    "    z-index:9999;\n",
    "    font-size:14px;\n",
    "    \">\n",
    "    <p><a style=\"color:#e6194b;font-size:150%;margin-left:20px;\">◼</a>&emsp;Consonants</p>\n",
    "    <p><a style=\"color:#19e6b4;font-size:150%;margin-left:20px;\">◼</a>&emsp;Vowels</p>\n",
    "</div>\n",
    "<div style=\"\n",
    "    position: fixed; \n",
    "    bottom: 50px;\n",
    "    left: 50px;\n",
    "    width: 150px;\n",
    "    height: 80px; \n",
    "    z-index:9998;\n",
    "    font-size:14px;\n",
    "    background-color: #ffffff;\n",
    "    filter: blur(8px);\n",
    "    -webkit-filter: blur(8px);\n",
    "    opacity: 0.7;\n",
    "    \">\n",
    "</div>\n",
    "{% endmacro %}\n",
    "'''\n",
    "\n",
    "legend = branca.element.MacroElement()\n",
    "legend._template = branca.element.Template(legend_html)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjQuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjQuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQiID48L2Rpdj4KICAgICAgICAKICAgIAo8ZGl2IHN0eWxlPSIKICAgIHBvc2l0aW9uOiBmaXhlZDsgCiAgICBib3R0b206IDUwcHg7CiAgICBsZWZ0OiA1MHB4OwogICAgd2lkdGg6IDI1MHB4OwogICAgaGVpZ2h0OiA4MHB4OwogICAgei1pbmRleDo5OTk5OwogICAgZm9udC1zaXplOjE0cHg7CiAgICAiPgogICAgPHA+PGEgc3R5bGU9ImNvbG9yOiNlNjE5NGI7Zm9udC1zaXplOjE1MCU7bWFyZ2luLWxlZnQ6MjBweDsiPuKXvDwvYT4mZW1zcDtDb25zb25hbnRzPC9wPgogICAgPHA+PGEgc3R5bGU9ImNvbG9yOiMxOWU2YjQ7Zm9udC1zaXplOjE1MCU7bWFyZ2luLWxlZnQ6MjBweDsiPuKXvDwvYT4mZW1zcDtWb3dlbHM8L3A+CjwvZGl2Pgo8ZGl2IHN0eWxlPSIKICAgIHBvc2l0aW9uOiBmaXhlZDsgCiAgICBib3R0b206IDUwcHg7CiAgICBsZWZ0OiA1MHB4OwogICAgd2lkdGg6IDE1MHB4OwogICAgaGVpZ2h0OiA4MHB4OyAKICAgIHotaW5kZXg6OTk5ODsKICAgIGZvbnQtc2l6ZToxNHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgIGZpbHRlcjogYmx1cig4cHgpOwogICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgIG9wYWNpdHk6IDAuNzsKICAgICI+CjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQgPSBMLm1hcCgKICAgICAgICAgICAgICAgICJtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNlbnRlcjogWzAuMCwgMC4wXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDIsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl84YjkwN2Y1MmIyM2M0MzJjOTUxYmIzMjZhY2E5MjI4YSA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTZkNTFiOTdmMmE0NGEzMjgwMzc1NmI5MzhjODdkZGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fMzg5YTNlZDc1MGU5NDIwMjhkNzVjMzk2NDBmNDg3ODAgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTcuMDc4NDE5IDI5LjM3MzgzOSAxNS45ODI5NjMgMjkuMDUwOTMyIDE0LjkyOTc3MSBDIDI4LjcyODAyNSAxMy44NzY1OCAyOC4yNDk5NjQgMTIuODc3MzY1IDI3LjYzMjUxOSAxMS45NjUwOTIgQyAyNy4wMTUwNzUgMTEuMDUyODE4IDI2LjI2NTExMyAxMC4yMzc2MzEgMjUuNDA3Mzc2IDkuNTQ2NDIzIEMgMjQuNTQ5NjQgOC44NTUyMTUgMjMuNTkzNjY2IDguMjk1NjczIDIyLjU3MDk5MyA3Ljg4NjI1NiBDIDIxLjU0ODMyMSA3LjQ3Njg0IDIwLjQ3MDMyMiA3LjIyMjEwMiAxOS4zNzI1NjEgNy4xMzA0NDcgQyAxOC4yNzQ3OTkgNy4wMzg3OTEgMTcuMTY5NDgzIDcuMTExMjM4IDE2LjA5MzA3NiA3LjM0NTM5NiBDIDE1LjAxNjY3IDcuNTc5NTUzIDEzLjk4MTE0MyA3Ljk3MjgxOSAxMy4wMjA2NTkgOC41MTIyMTggQyAxMi4wNjAxNzYgOS4wNTE2MTcgMTEuMTg1NDE1IDkuNzMxMTUyIDEwLjQyNTIzNyAxMC41Mjg0MDQgQyA5LjY2NTA1OSAxMS4zMjU2NTUgOS4wMjc5MTcgMTIuMjMxNzU5IDguNTM0ODMgMTMuMjE2ODIgQyA4LjA0MTc0NCAxNC4yMDE4ODIgNy42OTgxOTYgMTUuMjU0OTQ4IDcuNTE1NTIxIDE2LjM0MTI3NyBDIDcuMzMyODQ1IDE3LjQyNzYwNSA3LjMxMzA3NCAxOC41MzUxMTcgNy40NTY4NTkgMTkuNjI3Mjc0IEMgNy42MDA2NDQgMjAuNzE5NDMxIDcuOTA2Mzg3IDIxLjc4NDA4OCA4LjM2NCAyMi43ODYxMjEgQyA4LjgyMTYxMyAyMy43ODgxNTUgOS40MjYwMDkgMjQuNzE2NDIyIDEwLjE1NzI0NyAyNS41NDAyOTggQyAxMC44ODg0ODQgMjYuMzY0MTc0IDExLjczODQzMyAyNy4wNzQ0OTggMTIuNjc5MDUzIDI3LjY0NzgzNiBDIDEzLjYxOTY3MiAyOC4yMjExNzMgMTQuNjQwNTAyIDI4LjY1MTE0OSAxNS43MDc4NjUgMjguOTIzNTc3IEMgMTYuNzc1MjI4IDI5LjE5NjAwNSAxNy44NzcyNTUgMjkuMzA3ODU2IDE4Ljk3NzU4OCAyOS4yNTU0NDEgTCAxOC40NSAxOC4xOCBMIDI5LjUzOCAxOC4xOCB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTguOTc3NTg4IDI5LjI1NTQ0MSBDIDIxLjgyMjc4IDI5LjExOTkwOCAyNC41MDkxMjkgMjcuODkzMDkzIDI2LjQ3NDc2MyAyNS44MzE1OTYgQyAyOC40NDAzOTYgMjMuNzcwMDk5IDI5LjUzOCAyMS4wMjg0MTggMjkuNTM4IDE4LjE4IEwgMTguNDUgMTguMTggTCAxOC45Nzc1ODggMjkuMjU1NDQxIHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMTZkNTFiOTdmMmE0NGEzMjgwMzc1NmI5MzhjODdkZGQuc2V0SWNvbihkaXZfaWNvbl8zODlhM2VkNzUwZTk0MjAyOGQ3NWMzOTY0MGY0ODc4MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODZhYTRjNjYwNzJhNDg0MmE5OTcyOGY2MjRlMmRiYWEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwOTMwNDNlOGNhYzQ4ZTBhNjZkM2VlYzRhYmVjODhjID0gJChgPGRpdiBpZD0iaHRtbF9kMDkzMDQzZThjYWM0OGUwYTY2ZDNlZWM0YWJlYzg4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjU8YnI+IFZvd2VsczogODwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NmFhNGM2NjA3MmE0ODQyYTk5NzI4ZjYyNGUyZGJhYS5zZXRDb250ZW50KGh0bWxfZDA5MzA0M2U4Y2FjNDhlMGE2NmQzZWVjNGFiZWM4OGMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMTZkNTFiOTdmMmE0NGEzMjgwMzc1NmI5MzhjODdkZGQuYmluZFBvcHVwKHBvcHVwXzg2YWE0YzY2MDcyYTQ4NDJhOTk3MjhmNjI0ZTJkYmFhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzI3MmFhODRjMmQ5ZDQ5Mzg4MWI2M2RmOTIwMGJjZDYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl85NDZjMWM4ZmQ0NzY0YzdjYjlkZjIyMTY3MzM0ZGVlMSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNi4yNjQ1MzcgMjkuMDQxNjUzIDE0LjM4MTM2NCAyOC4wOTc1MjUgMTIuNzE0NzQ1IEMgMjcuMTUzMzk2IDExLjA0ODEyNSAyNS43OTMzMTkgOS42NTQyNSAyNC4xNTAzNzEgOC42Njk1MDUgQyAyMi41MDc0MjQgNy42ODQ3NiAyMC42MzY5OTkgNy4xNDIzNDcgMTguNzIyMTEzIDcuMDk1MzM5IEMgMTYuODA3MjI3IDcuMDQ4MzMyIDE0LjkxMjQ0MSA3LjQ5ODMxNCAxMy4yMjMxNTMgOC40MDEyNTcgQyAxMS41MzM4NjUgOS4zMDQyIDEwLjEwNzAzMiAxMC42Mjk2NjEgOS4wODIyNjQgMTIuMjQ3OTQ2IEMgOC4wNTc0OTYgMTMuODY2MjMyIDcuNDY5MzQzIDE1LjcyMjc4MiA3LjM3NTM1NiAxNy42MzU5MzggQyA3LjI4MTM2OSAxOS41NDkwOTMgNy42ODQ3MTUgMjEuNDU0MzUyIDguNTQ1OTI5IDIzLjE2NTI5IEMgOS40MDcxNDMgMjQuODc2MjI5IDEwLjY5NzE4OCAyNi4zMzUxNjEgMTIuMjg5ODM3IDI3LjM5OTMzNSBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMi4yODk4MzcgMjcuMzk5MzM1IEMgMTMuOTU5MjExIDI4LjUxNDc3NSAxNS45MDA2MTcgMjkuMTU2MTI5IDE3LjkwNTkzOCAyOS4yNTQ2NDQgQyAxOS45MTEyNTggMjkuMzUzMTU5IDIxLjkwNjE4IDI4LjkwNTE4NCAyMy42NzY4NDcgMjcuOTU4NzQzIEMgMjUuNDQ3NTE0IDI3LjAxMjMwMiAyNi45MjgzMTEgMjUuNjAyNDY2IDI3Ljk2MDQ5NSAyMy44ODAzNzEgQyAyOC45OTI2NzkgMjIuMTU4Mjc2IDI5LjUzOCAyMC4xODc3MzkgMjkuNTM4IDE4LjE4IEwgMTguNDUgMTguMTggTCAxMi4yODk4MzcgMjcuMzk5MzM1IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMjcyYWE4NGMyZDlkNDkzODgxYjYzZGY5MjAwYmNkNjMuc2V0SWNvbihkaXZfaWNvbl85NDZjMWM4ZmQ0NzY0YzdjYjlkZjIyMTY3MzM0ZGVlMSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjVmMGJiZTI5MzMzNDkzMDk1NWNiNzE4ZTg1NmI1MTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAwMWJiMDI5YjYxYzRmNzQ5ZWE4YzlkNDhmMmY4NzhlID0gJChgPGRpdiBpZD0iaHRtbF8wMDFiYjAyOWI2MWM0Zjc0OWVhOGM5ZDQ4ZjJmODc4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjE8YnI+IFZvd2VsczogMTE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjVmMGJiZTI5MzMzNDkzMDk1NWNiNzE4ZTg1NmI1MTQuc2V0Q29udGVudChodG1sXzAwMWJiMDI5YjYxYzRmNzQ5ZWE4YzlkNDhmMmY4NzhlKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzI3MmFhODRjMmQ5ZDQ5Mzg4MWI2M2RmOTIwMGJjZDYzLmJpbmRQb3B1cChwb3B1cF82NWYwYmJlMjkzMzM0OTMwOTU1Y2I3MThlODU2YjUxNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNGZkMjYyNzJjN2I0NDU5YjhiMjQ2NzExMTU2YWZiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8xOTNhZjk5ZjBlZjQ0ODE1OTVhZDA5OWU1YjA5NDNkOSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNi45NDkwNjEgMjkuMzMzMDIgMTUuNzI2NjcgMjguOTMxNDg0IDE0LjU2MzA2MyBDIDI4LjUyOTk0OSAxMy4zOTk0NTcgMjcuOTM3NDM0IDEyLjMxMDc5NiAyNy4xNzgyOSAxMS4zNDE4MjEgQyAyNi40MTkxNDcgMTAuMzcyODQ2IDI1LjUwMzkxOSA5LjUzNzAxNSAyNC40NzAyMTggOC44Njg2NzggQyAyMy40MzY1MTggOC4yMDAzNDEgMjIuMjk4NzAyIDcuNzA4NzggMjEuMTAzNTMyIDcuNDE0MTk3IEMgMTkuOTA4MzYyIDcuMTE5NjE0IDE4LjY3MjQzNiA3LjAyNjEgMTcuNDQ2NTQ4IDcuMTM3NDk5IEMgMTYuMjIwNjYgNy4yNDg4OTggMTUuMDIxODM2IDcuNTYzNjYxIDEzLjg5OTM0MyA4LjA2ODg1NSBDIDEyLjc3Njg0OSA4LjU3NDA0OCAxMS43NDYyNzggOS4yNjI2NTQgMTAuODQ5OTgxIDEwLjEwNjM3MyBDIDkuOTUzNjgzIDEwLjk1MDA5MyA5LjIwNDEwOSAxMS45MzcyMDcgOC42MzIwNjMgMTMuMDI3MTUgQyA4LjA2MDAxOCAxNC4xMTcwOTIgNy42NzM0NDUgMTUuMjk0NzI1IDcuNDg4MjMyIDE2LjUxMTY1IEMgNy4zMDMwMiAxNy43Mjg1NzUgNy4zMjE3NCAxOC45Njc4OTIgNy41NDM2MjMgMjAuMTc4NjY4IEMgNy43NjU1MDYgMjEuMzg5NDQ1IDguMTg3NDcgMjIuNTU0ODY0IDguNzkyMTc1IDIzLjYyNzAzMiBDIDkuMzk2ODc5IDI0LjY5OTE5OSAxMC4xNzU5MjUgMjUuNjYzMjI0IDExLjA5NzI5NiAyNi40Nzk0ODcgQyAxMi4wMTg2NjggMjcuMjk1NzUxIDEzLjA2OTU2NyAyNy45NTI5MTYgMTQuMjA2ODA3IDI4LjQyMzk3NiBDIDE1LjM0NDA0NiAyOC44OTUwMzYgMTYuNTUxODMgMjkuMTczNDQ4IDE3Ljc4MDUyNCAyOS4yNDc3NzEgQyAxOS4wMDkyMTcgMjkuMzIyMDkzIDIwLjI0MTc1NCAyOS4xOTEyOTMgMjEuNDI3NDgyIDI4Ljg2MDc0NiBDIDIyLjYxMzIxIDI4LjUzMDIgMjMuNzM1NjU5IDI4LjAwNDQ5OCAyNC43NDg3MDIgMjcuMzA1MjQ1IEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI0Ljc0ODcwMiAyNy4zMDUyNDUgQyAyNi4yMjU5NjMgMjYuMjg1NTY1IDI3LjQzMzc1NiAyNC45MjIyNDkgMjguMjY3OTM3IDIzLjMzMjg1IEMgMjkuMTAyMTE3IDIxLjc0MzQ1MSAyOS41MzggMTkuOTc1MDA1IDI5LjUzOCAxOC4xNzk5OTkgTCAxOC40NSAxOC4xOCBMIDI0Ljc0ODcwMiAyNy4zMDUyNDUgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl8xNGZkMjYyNzJjN2I0NDU5YjhiMjQ2NzExMTU2YWZiMS5zZXRJY29uKGRpdl9pY29uXzE5M2FmOTlmMGVmNDQ4MTU5NWFkMDk5ZTViMDk0M2Q5KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81MDk2YmI4N2U4NTE0Y2NkODAzZWZlOTg1YWFkYjE5MyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTdiYmE5OTA1ZWQ2NDAwMmEzZDZkMTY2MWZmYzI4MjUgPSAkKGA8ZGl2IGlkPSJodG1sX2U3YmJhOTkwNWVkNjQwMDJhM2Q2ZDE2NjFmZmMyODI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyMjxicj4gVm93ZWxzOiA0PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzUwOTZiYjg3ZTg1MTRjY2Q4MDNlZmU5ODVhYWRiMTkzLnNldENvbnRlbnQoaHRtbF9lN2JiYTk5MDVlZDY0MDAyYTNkNmQxNjYxZmZjMjgyNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8xNGZkMjYyNzJjN2I0NDU5YjhiMjQ2NzExMTU2YWZiMS5iaW5kUG9wdXAocG9wdXBfNTA5NmJiODdlODUxNGNjZDgwM2VmZTk4NWFhZGIxOTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWNhMTQzNDI4ZWNhNDk3NDg5MzVlMTc0ZWVmNTM3YmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uX2NlYTBmNGQ1YWVlZjRmNmViZmIxMTcxMDBhOGM0MDNkID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICBcdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuNTM4IDE4LjE4IEMgMjkuNTM4IDE2LjI5MTY1IDI5LjA1NTYwNSAxNC40MzQyMzQgMjguMTM2NzI1IDEyLjc4NDUyOSBDIDI3LjIxNzg0NSAxMS4xMzQ4MjQgMjUuODkyNTg3IDkuNzQ2ODggMjQuMjg3MDggOC43NTI3OTIgQyAyMi42ODE1NzIgNy43NTg3MDQgMjAuODQ4NDE3IDcuMTkxMDQyIDE4Ljk2MjA4MiA3LjEwMzgzMSBDIDE3LjA3NTc0NiA3LjAxNjYyMSAxNS4xOTgwMzQgNy40MTI3MiAxMy41MDc2NTIgOC4yNTQ0MyBDIDExLjgxNzI3MSA5LjA5NjE0IDEwLjM2OTYwMyAxMC4zNTU4ODQgOS4zMDI0MjcgMTEuOTEzNzY4IEMgOC4yMzUyNTIgMTMuNDcxNjUyIDcuNTgzNTM0IDE1LjI3NjYzNSA3LjQwOTI5OSAxNy4xNTY5MyBDIDcuMjM1MDY1IDE5LjAzNzIyNCA3LjU0NDAyMiAyMC45MzEyMjYgOC4zMDY3NjYgMjIuNjU4Njc3IEMgOS4wNjk1MTEgMjQuMzg2MTI4IDEwLjI2MTA1MiAyNS44OTA0MzEgMTEuNzY3OTg4IDI3LjAyODQxNiBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMS43Njc5ODggMjcuMDI4NDE2IEMgMTMuNDEzNTY5IDI4LjI3MTEwMSAxNS4zNzM2NCAyOS4wMzA0MzYgMTcuNDI2OTMgMjkuMjIwNzAxIEMgMTkuNDgwMjIgMjkuNDEwOTY2IDIxLjU0NjQ0NCAyOS4wMjQ3MjEgMjMuMzkyMzQ4IDI4LjEwNTU3IEMgMjUuMjM4MjUzIDI3LjE4NjQxOCAyNi43OTE2NiAyNS43NzAzIDI3Ljg3NzIwOSAyNC4wMTcwNzggQyAyOC45NjI3NTcgMjIuMjYzODU3IDI5LjUzOCAyMC4yNDIwODUgMjkuNTM4IDE4LjE3OTk5OCBMIDE4LjQ1IDE4LjE4IEwgMTEuNzY3OTg4IDI3LjAyODQxNiB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzVjYTE0MzQyOGVjYTQ5NzQ4OTM1ZTE3NGVlZjUzN2JmLnNldEljb24oZGl2X2ljb25fY2VhMGY0ZDVhZWVmNGY2ZWJmYjExNzEwMGE4YzQwM2QpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzg0ZTI5NzdhYjc3NDQzOWJiZGExYzAwOTVjNmQ4NGVhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hMGI5MjZiYjliNWY0OTIwOTc1ZTY5ZDdmYTdmOGZkNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTBiOTI2YmI5YjVmNDkyMDk3NWU2OWQ3ZmE3ZjhmZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIyPGJyPiBWb3dlbHM6IDEyPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg0ZTI5NzdhYjc3NDQzOWJiZGExYzAwOTVjNmQ4NGVhLnNldENvbnRlbnQoaHRtbF9hMGI5MjZiYjliNWY0OTIwOTc1ZTY5ZDdmYTdmOGZkNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81Y2ExNDM0MjhlY2E0OTc0ODkzNWUxNzRlZWY1MzdiZi5iaW5kUG9wdXAocG9wdXBfODRlMjk3N2FiNzc0NDM5YmJkYTFjMDA5NWM2ZDg0ZWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWQ2NGIxOWQ4ZmFkNGQyNGE5YzZmY2YzMTg0ODMyNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fNzcxYWUxZjZhYjZlNDI2NTlmNGYwYzc4MmU3NDllYjAgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTYuMjg2OTYxIDI5LjA1MzIwNiAxNC40MjUwODggMjguMTI5OTgxIDEyLjc3MjQzOSBDIDI3LjIwNjc1NSAxMS4xMTk3ODkgMjUuODc1NDk3IDkuNzMwNzc5IDI0LjI2MzUyIDguNzM4MjQ1IEMgMjIuNjUxNTQyIDcuNzQ1NzExIDIwLjgxMTkyMiA3LjE4MjMzNCAxOC45MjA1ODkgNy4xMDE5OTEgQyAxNy4wMjkyNTYgNy4wMjE2NDggMTUuMTQ4NDg1IDcuNDI2OTg1IDEzLjQ1ODE0MiA4LjI3OTIzOCBDIDExLjc2Nzc5OCA5LjEzMTQ5MSAxMC4zMjM1NCAxMC40MDI1OTggOS4yNjM0ODYgMTEuOTcwOTk5IEMgOC4yMDM0MzEgMTMuNTM5Mzk5IDcuNTYyNDg2IDE1LjM1MzQ1MSA3LjQwMTk0NSAxNy4yMzk2NyBDIDcuMjQxNDA0IDE5LjEyNTg5IDcuNTY2NTUzIDIxLjAyMjE2OCA4LjM0NjI5OCAyMi43NDcxNTkgQyA5LjEyNjA0MyAyNC40NzIxNTEgMTAuMzM0NzA4IDI1Ljk2OTA1NSAxMS44NTY3MDYgMjcuMDk0NzE5IEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDExLjg1NjcwNiAyNy4wOTQ3MTkgQyAxMy41MDcwNTYgMjguMzE1MzEyIDE1LjQ2NDM4MyAyOS4wNTM5NzUgMTcuNTA5NjcgMjkuMjI4MDU1IEMgMTkuNTU0OTU3IDI5LjQwMjEzNSAyMS42MDg5NjQgMjkuMDA0ODg4IDIzLjQ0MTg1NyAyOC4wODA3NjMgQyAyNS4yNzQ3NSAyNy4xNTY2MzggMjYuODE1NTE3IDI1Ljc0MTQzOSAyNy44OTE3NTQgMjMuOTkzNTIxIEMgMjguOTY3OTkxIDIyLjI0NTYwMiAyOS41MzggMjAuMjMyNjg0IDI5LjUzOCAxOC4xODAwMDIgTCAxOC40NSAxOC4xOCBMIDExLjg1NjcwNiAyNy4wOTQ3MTkgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl85ZDY0YjE5ZDhmYWQ0ZDI0YTljNmZjZjMxODQ4MzI2Mi5zZXRJY29uKGRpdl9pY29uXzc3MWFlMWY2YWI2ZTQyNjU5ZjRmMGM3ODJlNzQ5ZWIwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lOWE3ZGQwYzQ1ZGQ0NmIxYjA1MzhmYmUwNDIxNTI3OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjQxYmZlZWMyYWY4NDQ5YzgyZTcyYzBlY2ZhZmRkYzggPSAkKGA8ZGl2IGlkPSJodG1sXzY0MWJmZWVjMmFmODQ0OWM4MmU3MmMwZWNmYWZkZGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyNDxicj4gVm93ZWxzOiAxMzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lOWE3ZGQwYzQ1ZGQ0NmIxYjA1MzhmYmUwNDIxNTI3OS5zZXRDb250ZW50KGh0bWxfNjQxYmZlZWMyYWY4NDQ5YzgyZTcyYzBlY2ZhZmRkYzgpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOWQ2NGIxOWQ4ZmFkNGQyNGE5YzZmY2YzMTg0ODMyNjIuYmluZFBvcHVwKHBvcHVwX2U5YTdkZDBjNDVkZDQ2YjFiMDUzOGZiZTA0MjE1Mjc5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzQ1YTliMjk5ZjA2NjQ1ZmY4ZmFiZjcxNzA1NWVmMTIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yNzk1NjE4YzMwMzg0YTk2OWZiM2M5NDVjMTMwNjVkNCA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNy4wNjE0MDggMjkuMzY4NzI5IDE1Ljk0OTIyOSAyOS4wMzU5NDUgMTQuODgxMjg2IEMgMjguNzAzMTYgMTMuODEzMzQzIDI4LjIxMDY3OCAxMi44MDE4ODEgMjcuNTc1MjQ1IDExLjg4MTI5OCBDIDI2LjkzOTgxMiAxMC45NjA3MTUgMjYuMTY4NzE2IDEwLjE0MTU2NiAyNS4yODgxNzkgOS40NTE3MDkgQyAyNC40MDc2NDIgOC43NjE4NTMgMjMuNDI3NzYgOC4yMDkxOTggMjIuMzgxODU5IDcuODEyNTQgQyAyMS4zMzU5NTcgNy40MTU4ODIgMjAuMjM2MDI4IDcuMTc5NzY4IDE5LjExOTQ3NiA3LjExMjIyOSBDIDE4LjAwMjkyNSA3LjA0NDY5MSAxNi44ODI1NTUgNy4xNDY1MDEgMTUuNzk2NDY4IDcuNDE0MTk3IEMgMTQuNzEwMzggNy42ODE4OTQgMTMuNjcxMDI4IDguMTEyNDA4IDEyLjcxMzc1OCA4LjY5MTA5NyBDIDExLjc1NjQ4OCA5LjI2OTc4NyAxMC44OTIyNzYgOS45OTAwMTggMTAuMTUwNTEzIDEwLjgyNzI5NiBDIDkuNDA4NzQ5IDExLjY2NDU3NCA4Ljc5NzkzOSAxMi42MDkzIDguMzM4ODU0IDEzLjYyOTM0MyBDIDcuODc5NzcgMTQuNjQ5Mzg3IDcuNTc3Njc1IDE1LjczMzA1NCA3LjQ0Mjg0NCAxNi44NDM0OSBDIDcuMzA4MDEzIDE3Ljk1MzkyNiA3LjM0MTk5MSAxOS4wNzgzOTkgNy41NDM2MjMgMjAuMTc4NjY5IEMgNy43NDUyNTQgMjEuMjc4OTM4IDguMTEyMjI4IDIyLjM0MjM4NyA4LjYzMjA2NCAyMy4zMzI4NTEgQyA5LjE1MTkgMjQuMzIzMzE1IDkuODE4NjM3IDI1LjIyOTQzNyAxMC42MDk2MDEgMjYuMDIwNDAxIEMgMTEuNDAwNTY1IDI2LjgxMTM2NCAxMi4zMDY2ODYgMjcuNDc4MTAxIDEzLjI5NzE1IDI3Ljk5NzkzNyBDIDE0LjI4NzYxNCAyOC41MTc3NzIgMTUuMzUxMDY0IDI4Ljg4NDc0NiAxNi40NTEzMzMgMjkuMDg2Mzc4IEMgMTcuNTUxNjAyIDI5LjI4ODAwOSAxOC42NzYwNzYgMjkuMzIxOTg3IDE5Ljc4NjUxMiAyOS4xODcxNTYgTCAxOC40NSAxOC4xOCBMIDI5LjUzOCAxOC4xOCB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTkuNzg2NTEyIDI5LjE4NzE1NiBDIDIyLjQ3NTI4MSAyOC44NjA2OCAyNC45NTM0MDkgMjcuNTYwMDU4IDI2Ljc0OTQ4OCAyNS41MzI3MDMgQyAyOC41NDU1NjcgMjMuNTA1MzQ5IDI5LjUzOCAyMC44ODg1MTcgMjkuNTM4IDE4LjE3OTk5OSBMIDE4LjQ1IDE4LjE4IEwgMTkuNzg2NTEyIDI5LjE4NzE1NiB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzQ1YTliMjk5ZjA2NjQ1ZmY4ZmFiZjcxNzA1NWVmMTIyLnNldEljb24oZGl2X2ljb25fMjc5NTYxOGMzMDM4NGE5NjlmYjNjOTQ1YzEzMDY1ZDQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U3NTcyYzE0ZGM2MDQwZWE5YzM4ZDZkN2EzMTUwYmRkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84YmE3OWM0MmYxZDQ0NjI5ODU1NzNiYTM0MDZmNTJlNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGJhNzljNDJmMWQ0NDYyOTg1NTczYmEzNDA2ZjUyZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIwPGJyPiBWb3dlbHM6IDY8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTc1NzJjMTRkYzYwNDBlYTljMzhkNmQ3YTMxNTBiZGQuc2V0Q29udGVudChodG1sXzhiYTc5YzQyZjFkNDQ2Mjk4NTU3M2JhMzQwNmY1MmU3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzQ1YTliMjk5ZjA2NjQ1ZmY4ZmFiZjcxNzA1NWVmMTIyLmJpbmRQb3B1cChwb3B1cF9lNzU3MmMxNGRjNjA0MGVhOWMzOGQ2ZDdhMzE1MGJkZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNjhjNDg4MmJjMjQ0NzhhYTRmNjkwN2UwN2VhZTk5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk0MDMsIC05OC45MDQyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fMjJlYzYzYjFiOGZlNDIyMmIwNjQzMjMwNDU3ZjgxMTkgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTYuNjU0MTI4IDI5LjIyMzAyNiAxNS4xNDQ1NTQgMjguNjEyODQyIDEzLjc0NTk5NyBDIDI4LjAwMjY1OCAxMi4zNDc0NCAyNy4xMTAyOTggMTEuMDg5Nzc3IDI1Ljk5MTc1NSAxMC4wNTE5MjEgQyAyNC44NzMyMTIgOS4wMTQwNjQgMjMuNTUyMzc5IDguMjE4MTg1IDIyLjExMjEzNCA3LjcxNDIyMSBDIDIwLjY3MTg4OCA3LjIxMDI1OCAxOS4xNDI5OTcgNy4wMDg5NzYgMTcuNjIxMzkyIDcuMTIzMDA0IEMgMTYuMDk5Nzg2IDcuMjM3MDMzIDE0LjYxNzk3MSA3LjY2MzkzNyAxMy4yNjg5MjQgOC4zNzY5MjkgQyAxMS45MTk4NzcgOS4wODk5MjEgMTAuNzMyNDE3IDEwLjA3Mzc3MSA5Ljc4MTA1MiAxMS4yNjY3NDYgQyA4LjgyOTY4NiAxMi40NTk3MjEgOC4xMzQ3MzkgMTMuODM2MzM3IDcuNzM5ODE0IDE1LjMxMDIxNiBDIDcuMzQ0ODg5IDE2Ljc4NDA5NSA3LjI1ODQyNCAxOC4zMjM3NTMgNy40ODU4NDQgMTkuODMyNTgzIEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDcuNDg1ODQ0IDE5LjgzMjU4MyBDIDcuOTAyNjI3IDIyLjU5Nzc1MyA5LjM1MDQzIDI1LjEwNTQyIDExLjUzNjc0NyAyNi44NDg5NDkgQyAxMy43MjMwNjMgMjguNTkyNDc4IDE2LjQ5MDAyNSAyOS40NDU5NzIgMTkuMjc4NjA5IDI5LjIzNjk5NiBDIDIyLjA2NzE5NCAyOS4wMjgwMiAyNC42NzYwNDMgMjcuNzcxNjYzIDI2LjU3ODA4MSAyNS43MjE3NTQgQyAyOC40ODAxMTggMjMuNjcxODQ1IDI5LjUzODAwMSAyMC45NzY0MDIgMjkuNTM4IDE4LjE3OTk5OCBMIDE4LjQ1IDE4LjE4IEwgNy40ODU4NDQgMTkuODMyNTgzIHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfZDY4YzQ4ODJiYzI0NDc4YWE0ZjY5MDdlMDdlYWU5OTYuc2V0SWNvbihkaXZfaWNvbl8yMmVjNjNiMWI4ZmU0MjIyYjA2NDMyMzA0NTdmODExOSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDZmYzQzMzA4NGNlNDk3MDkxNjAwZWJiMDBhZTkxZmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzhhNDEzMWM3ODdhZjQzODhiZWJhN2EzNmM3ZTVlYWFjID0gJChgPGRpdiBpZD0iaHRtbF84YTQxMzFjNzg3YWY0Mzg4YmViYTdhMzZjN2U1ZWFhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjI8YnI+IFZvd2VsczogMjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDZmYzQzMzA4NGNlNDk3MDkxNjAwZWJiMDBhZTkxZmQuc2V0Q29udGVudChodG1sXzhhNDEzMWM3ODdhZjQzODhiZWJhN2EzNmM3ZTVlYWFjKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2Q2OGM0ODgyYmMyNDQ3OGFhNGY2OTA3ZTA3ZWFlOTk2LmJpbmRQb3B1cChwb3B1cF8wNmZjNDMzMDg0Y2U0OTcwOTE2MDBlYmIwMGFlOTFmZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjE0NDY3YTAwMDg0M2JhODc1Nzk4MDcwYWM4ODg2MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fZDZiM2VmZGU1OTFkNDgxMWE0ZTY5Zjk3YjAzOGYyN2QgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTUuOTg3MjYzIDI4Ljg4NzU1NCAxMy44NDMwMzEgMjcuNjY5MzM1IDEyLjAxOTgzNyBDIDI2LjQ1MTExNiAxMC4xOTY2NDMgMjQuNzE5MDE4IDguNzc1MTQ4IDIyLjY5MzE5NCA3LjkzNjAyNCBDIDIwLjY2NzM2OSA3LjA5NjkgMTguNDM3NDQyIDYuODc3MjcxIDE2LjI4NjgzOSA3LjMwNTA1MyBDIDE0LjEzNjIzNSA3LjczMjgzNSAxMi4xNjAwOTkgOC43ODkxMDEgMTAuNjA5NiAxMC4zMzk2IEMgOS4wNTkxMDEgMTEuODkwMDk5IDguMDAyODM1IDEzLjg2NjIzNSA3LjU3NTA1MyAxNi4wMTY4MzkgQyA3LjE0NzI3MSAxOC4xNjc0NDIgNy4zNjY5IDIwLjM5NzM2OSA4LjIwNjAyNCAyMi40MjMxOTQgQyA5LjA0NTE0OCAyNC40NDkwMTggMTAuNDY2NjQzIDI2LjE4MTExNiAxMi4yODk4MzcgMjcuMzk5MzM1IEMgMTQuMTEzMDMxIDI4LjYxNzU1NCAxNi4yNTcyNjMgMjkuMjY4IDE4LjQ1IDI5LjI2OCBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxOC40NSAyOS4yNjggQyAyMS4zODk1OTMgMjkuMjY4IDI0LjIxMTc5NCAyOC4wOTkwMDYgMjYuMjkwNCAyNi4wMjA0IEMgMjguMzY5MDA2IDIzLjk0MTc5NCAyOS41MzggMjEuMTE5NTkzIDI5LjUzOCAxOC4xOCBMIDE4LjQ1IDE4LjE4IEwgMTguNDUgMjkuMjY4IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfNjYxNDQ2N2EwMDA4NDNiYTg3NTc5ODA3MGFjODg4NjEuc2V0SWNvbihkaXZfaWNvbl9kNmIzZWZkZTU5MWQ0ODExYTRlNjlmOTdiMDM4ZjI3ZCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzNmYTc5ZWM2ZWIxNGJhYmExYTgzOWUwZjdhMjVlMTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkyNjYzZDc1YWZkYjRhMjViZGEwMjEzN2MyNmFhYmYxID0gJChgPGRpdiBpZD0iaHRtbF85MjY2M2Q3NWFmZGI0YTI1YmRhMDIxMzdjMjZhYWJmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMTU8YnI+IFZvd2VsczogNTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zM2ZhNzllYzZlYjE0YmFiYTFhODM5ZTBmN2EyNWUxMS5zZXRDb250ZW50KGh0bWxfOTI2NjNkNzVhZmRiNGEyNWJkYTAyMTM3YzI2YWFiZjEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjYxNDQ2N2EwMDA4NDNiYTg3NTc5ODA3MGFjODg4NjEuYmluZFBvcHVwKHBvcHVwXzMzZmE3OWVjNmViMTRiYWJhMWE4MzllMGY3YTI1ZTExKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2UyMzdmOGE2M2JjNzQwMWJiOTc5MjgyZjFlNzU4YWIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4xNTM0NSwgMy42NzIyNV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzFhMjRhYTdmZTcxZjRiNmY5ZTAyYjYwZGQ1ZGQwNjIxID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICBcdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuNTM4IDE4LjE4IEMgMjkuNTM4IDE2LjM2OTM3IDI5LjA5NDQ5NiAxNC41ODYwMDEgMjguMjQ2MzgyIDEyLjk4NjI4NyBDIDI3LjM5ODI2NyAxMS4zODY1NzQgMjYuMTcxMDgxIDEwLjAxODY4NyAyNC42NzI0NDMgOS4wMDI1ODUgQyAyMy4xNzM4MDQgNy45ODY0ODIgMjEuNDQ4ODQgNy4zNTI3NjIgMTkuNjQ4ODI0IDcuMTU2OTk4IEMgMTcuODQ4ODA4IDYuOTYxMjM1IDE2LjAyNzk0MiA3LjIwOTMyMyAxNC4zNDU5MDkgNy44Nzk1MDYgQyAxMi42NjM4NzYgOC41NDk2ODkgMTEuMTcxMzI1IDkuNjIxNzg3IDkuOTk5MTQ4IDExLjAwMTc4IEMgOC44MjY5NzEgMTIuMzgxNzczIDguMDEwNDY0IDE0LjAyODEwOCA3LjYyMTIzMiAxNS43OTY0MDcgQyA3LjIzMTk5OSAxNy41NjQ3MDUgNy4yODE3NjMgMTkuNDAxNzIgNy43NjYxNTcgMjEuMTQ2MzUzIEMgOC4yNTA1NTIgMjIuODkwOTg1IDkuMTU0OTkyIDI0LjQ5MDcwMSAxMC40MDAxNjEgMjUuODA1MjEgTCAxOC40NSAxOC4xOCBMIDI5LjUzOCAxOC4xOCB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTAuNDAwMTYxIDI1LjgwNTIxIEMgMTEuOTI1Njg2IDI3LjQxNTY4OCAxMy44OTk5NjYgMjguNTMxODk4IDE2LjA2NjQwNiAyOS4wMDg3NjggQyAxOC4yMzI4NDYgMjkuNDg1NjM4IDIwLjQ5MzMzOCAyOS4zMDE1NzMgMjIuNTU0MDkgMjguNDgwNDk1IEMgMjQuNjE0ODQyIDI3LjY1OTQxNiAyNi4zODI1MzEgMjYuMjM4NTA4IDI3LjYyNzQxNCAyNC40MDI0NDQgQyAyOC44NzIyOTggMjIuNTY2Mzc5IDI5LjUzOCAyMC4zOTgzMDUgMjkuNTM4IDE4LjE4MDAwMiBMIDE4LjQ1IDE4LjE4IEwgMTAuNDAwMTYxIDI1LjgwNTIxIHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfZTIzN2Y4YTYzYmM3NDAxYmI5NzkyODJmMWU3NThhYjIuc2V0SWNvbihkaXZfaWNvbl8xYTI0YWE3ZmU3MWY0YjZmOWUwMmI2MGRkNWRkMDYyMSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWIyYjkyYjRhZjZhNDBjMDlhOGMyOTJjNTcwYzMxMmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRiNWRhNTE0YzFjZDQyZWI5YmU2NGUzYzIyNTJkODc0ID0gJChgPGRpdiBpZD0iaHRtbF80YjVkYTUxNGMxY2Q0MmViOWJlNjRlM2MyMjUyZDg3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMTg8YnI+IFZvd2VsczogMTE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWIyYjkyYjRhZjZhNDBjMDlhOGMyOTJjNTcwYzMxMmEuc2V0Q29udGVudChodG1sXzRiNWRhNTE0YzFjZDQyZWI5YmU2NGUzYzIyNTJkODc0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2UyMzdmOGE2M2JjNzQwMWJiOTc5MjgyZjFlNzU4YWIyLmJpbmRQb3B1cChwb3B1cF9hYjJiOTJiNGFmNmE0MGMwOWE4YzI5MmM1NzBjMzEyYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZjRlZGUzNmRiZjU0MzczODdiNjNlNzNmZTdhMzM1ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8xZTM5NWZhNjdjM2E0NDEzODk0N2VjN2YzOWY4YzM4YSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNi4xOTQ0MjEgMjkuMDA0NjUgMTQuMjQ0ODIgMjcuOTkzOTA4IDEyLjUzNTc0OSBDIDI2Ljk4MzE2NSAxMC44MjY2NzcgMjUuNTMxNjYxIDkuNDIwMDcyIDIzLjc5MTY4NSA4LjQ2MzUxMSBDIDIyLjA1MTcwOCA3LjUwNjk1MSAyMC4wODYzMTcgNy4wMzUxMDMgMTguMTAxNzE3IDcuMDk3NDcxIEMgMTYuMTE3MTE4IDcuMTU5ODQgMTQuMTg1MjMyIDcuNzU0MTY1IDEyLjUwODc1MiA4LjgxODA5MiBDIDEwLjgzMjI3MiA5Ljg4MjAxOSA5LjQ3MTk1NCAxMS4zNzY5ODkgOC41NzA1MiAxMy4xNDYxNTQgQyA3LjY2OTA4NSAxNC45MTUzMTggNy4yNTkyMDQgMTYuODk0NTYgNy4zODM4OCAxOC44NzYyMjIgQyA3LjUwODU1NSAyMC44NTc4ODMgOC4xNjMyNyAyMi43NzAxNDcgOS4yNzkzMzEgMjQuNDEyMzgxIEMgMTAuMzk1MzkyIDI2LjA1NDYxNSAxMS45MzIzNTQgMjcuMzY3MzA0IDEzLjcyODk2IDI4LjIxMjcyMyBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMy43Mjg5NiAyOC4yMTI3MjMgQyAxNS40MTg3NTYgMjkuMDA3ODggMTcuMjgyMzcxIDI5LjM2MzM4NCAxOS4xNDYyMjIgMjkuMjQ2MTIgQyAyMS4wMTAwNzIgMjkuMTI4ODU3IDIyLjgxNDQzNSAyOC41NDI1ODQgMjQuMzkxMjQ4IDI3LjU0MTkwOCBDIDI1Ljk2ODA2IDI2LjU0MTIzMiAyNy4yNjY3OTYgMjUuMTU4MjE4IDI4LjE2NjQ4OSAyMy41MjE2ODUgQyAyOS4wNjYxODEgMjEuODg1MTUxIDI5LjUzOCAyMC4wNDc1MzYgMjkuNTM4IDE4LjE4IEwgMTguNDUgMTguMTggTCAxMy43Mjg5NiAyOC4yMTI3MjMgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl9hZjRlZGUzNmRiZjU0MzczODdiNjNlNzNmZTdhMzM1ZC5zZXRJY29uKGRpdl9pY29uXzFlMzk1ZmE2N2MzYTQ0MTM4OTQ3ZWM3ZjM5ZjhjMzhhKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MjQ0MTliNjE3NGM0NTliOTA0MDM2NjExMGYxYTlkMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTE2YTlmNDQ2MzFhNDFhMWFhZjhhYTg5ODgyMjJhOTAgPSAkKGA8ZGl2IGlkPSJodG1sX2UxNmE5ZjQ0NjMxYTQxYTFhYWY4YWE4OTg4MjIyYTkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAxNzxicj4gVm93ZWxzOiA4PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQyNDQxOWI2MTc0YzQ1OWI5MDQwMzY2MTEwZjFhOWQzLnNldENvbnRlbnQoaHRtbF9lMTZhOWY0NDYzMWE0MWExYWFmOGFhODk4ODIyMmE5MCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hZjRlZGUzNmRiZjU0MzczODdiNjNlNzNmZTdhMzM1ZC5iaW5kUG9wdXAocG9wdXBfNDI0NDE5YjYxNzRjNDU5YjkwNDAzNjYxMTBmMWE5ZDMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmRkMDE2MTZmOWYyNGE2MWJhMmRhODM4ZmE4OTFhNjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fMmQyMjJjZTEwZDE0NGZiNzk3OGEyM2VmYzlmMTZmNjYgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTYuMzg0OTk0IDI5LjEwMjExNyAxNC42MTY1NDggMjguMjY3OTM2IDEzLjAyNzE0OSBDIDI3LjQzMzc1NSAxMS40Mzc3NTEgMjYuMjI1OTYyIDEwLjA3NDQzNCAyNC43NDg3MDIgOS4wNTQ3NTUgQyAyMy4yNzE0NDEgOC4wMzUwNzUgMjEuNTY4NDI4IDcuMzg5MjA4IDE5Ljc4NjUxIDcuMTcyODQ0IEMgMTguMDA0NTkyIDYuOTU2NDggMTYuMTk2NSA3LjE3NjAyMiAxNC41MTgxNCA3LjgxMjU0IEMgMTIuODM5NzgxIDguNDQ5MDU4IDExLjM0MDgyMSA5LjQ4MzcxNSAxMC4xNTA1MTIgMTAuODI3Mjk3IEMgOC45NjAyMDMgMTIuMTcwODc4IDguMTEzNzcgMTMuNzgzNjIzIDcuNjg0MTk3IDE1LjUyNjQ2OSBDIDcuMjU0NjI0IDE3LjI2OTMxNSA3LjI1NDYyNCAxOS4wOTA2ODcgNy42ODQxOTcgMjAuODMzNTMzIEMgOC4xMTM3NzEgMjIuNTc2MzggOC45NjAyMDUgMjQuMTg5MTI0IDEwLjE1MDUxNCAyNS41MzI3MDUgTCAxOC40NSAxOC4xOCBMIDI5LjUzOCAxOC4xOCB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTAuMTUwNTE0IDI1LjUzMjcwNSBDIDExLjY0MjM5OCAyNy4yMTY2OTMgMTMuNjEyMDU5IDI4LjQwNzM5NSAxNS43OTY0NyAyOC45NDU4MDMgQyAxNy45ODA4OCAyOS40ODQyMTIgMjAuMjc4Mjc1IDI5LjM0NTI0NSAyMi4zODE4NjEgMjguNTQ3NDU5IEMgMjQuNDg1NDQ2IDI3Ljc0OTY3NCAyNi4yOTcyMjMgMjYuMzMwMjM3IDI3LjU3NTI0NiAyNC40Nzg3IEMgMjguODUzMjcgMjIuNjI3MTYzIDI5LjUzOCAyMC40Mjk3ODMgMjkuNTM4IDE4LjE3OTk5OCBMIDE4LjQ1IDE4LjE4IEwgMTAuMTUwNTE0IDI1LjUzMjcwNSB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyX2ZkZDAxNjE2ZjlmMjRhNjFiYTJkYTgzOGZhODkxYTYwLnNldEljb24oZGl2X2ljb25fMmQyMjJjZTEwZDE0NGZiNzk3OGEyM2VmYzlmMTZmNjYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzlhZWYyNzc4ZDg2MzRkZThiMGYzY2UyYmZhYjczZTU1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81NDU5M2RiNzE3MjE0NTY1YmIyM2E2ODRmOTc1NzM2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTQ1OTNkYjcxNzIxNDU2NWJiMjNhNjg0Zjk3NTczNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDg8YnI+IFZvd2VsczogNTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85YWVmMjc3OGQ4NjM0ZGU4YjBmM2NlMmJmYWI3M2U1NS5zZXRDb250ZW50KGh0bWxfNTQ1OTNkYjcxNzIxNDU2NWJiMjNhNjg0Zjk3NTczNmYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZmRkMDE2MTZmOWYyNGE2MWJhMmRhODM4ZmE4OTFhNjAuYmluZFBvcHVwKHBvcHVwXzlhZWYyNzc4ZDg2MzRkZThiMGYzY2UyYmZhYjczZTU1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzY1YTIwNWRjNGIyZDQxM2NhNDU4MTVjZDgwNjUwYThjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzBlNjdlOTZhNzgxNTQyNGFhYTQ3NWNmM2E4OTczMjZiID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICBcdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuNTM4IDE4LjE4IEMgMjkuNTM4IDE2LjI4Mjk3NSAyOS4wNTExNjIgMTQuNDE3MzE0IDI4LjEyNDIzNiAxMi43NjIxNjggQyAyNy4xOTczMDkgMTEuMTA3MDIxIDI1Ljg2MDk0NCA5LjcxNzExOSAyNC4yNDM0NjQgOC43MjU5MjYgQyAyMi42MjU5ODUgNy43MzQ3MzMgMjAuNzgwODc2IDcuMTc1MDI1IDE4Ljg4NTMxMyA3LjEwMDU0OCBDIDE2Ljk4OTc1MSA3LjAyNjA3MiAxNS4xMDY0MTYgNy40MzkyODggMTMuNDE2MTU0IDguMzAwNTE5IEMgMTEuNzI1ODkyIDkuMTYxNzUgMTAuMjg0NTk2IDEwLjQ0MjUxOCA5LjIzMDY2NiAxMi4wMTk4MzYgQyA4LjE3NjczNSAxMy41OTcxNTUgNy41NDUwMiAxNS40MTg4NjcgNy4zOTYxODEgMTcuMzEwMDQ0IEMgNy4yNDczNDIgMTkuMjAxMjIxIDcuNTg2MyAyMS4wOTkzMjggOC4zODA1MDggMjIuODIyMDk4IEMgOS4xNzQ3MTYgMjQuNTQ0ODY4IDEwLjM5NzkxMSAyNi4wMzUzMzYgMTEuOTMyNjM2IDI3LjE1MDM3OSBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMS45MzI2MzYgMjcuMTUwMzc5IEMgMTMuNTg2ODI0IDI4LjM1MjIxOCAxNS41NDE2NTcgMjkuMDczMzk0IDE3LjU4MDA0NCAyOS4yMzM4MTkgQyAxOS42MTg0MyAyOS4zOTQyNDQgMjEuNjYyMDEzIDI4Ljk4Nzc1MSAyMy40ODM4NDUgMjguMDU5NDgxIEMgMjUuMzA1Njc3IDI3LjEzMTIxMiAyNi44MzU3MjUgMjUuNzE2ODUgMjcuOTA0MDczIDIzLjk3MzQ2NiBDIDI4Ljk3MjQyMSAyMi4yMzAwODEgMjkuNTM4IDIwLjIyNDY5MiAyOS41MzggMTguMTgwMDAyIEwgMTguNDUgMTguMTggTCAxMS45MzI2MzYgMjcuMTUwMzc5IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfNjVhMjA1ZGM0YjJkNDEzY2E0NTgxNWNkODA2NTBhOGMuc2V0SWNvbihkaXZfaWNvbl8wZTY3ZTk2YTc4MTU0MjRhYWE0NzVjZjNhODk3MzI2Yik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzNjNjI4ZDQ2ZmQxNDgwNWJhY2QwYTA4YjY0ZGVlMjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2FkZTA2YTYzMDRlMjRmNjE5M2U4MDJlYmJhOTk0ZDYzID0gJChgPGRpdiBpZD0iaHRtbF9hZGUwNmE2MzA0ZTI0ZjYxOTNlODAyZWJiYTk5NGQ2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjY8YnI+IFZvd2VsczogMTQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzNjNjI4ZDQ2ZmQxNDgwNWJhY2QwYTA4YjY0ZGVlMjMuc2V0Q29udGVudChodG1sX2FkZTA2YTYzMDRlMjRmNjE5M2U4MDJlYmJhOTk0ZDYzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzY1YTIwNWRjNGIyZDQxM2NhNDU4MTVjZDgwNjUwYThjLmJpbmRQb3B1cChwb3B1cF8zM2M2MjhkNDZmZDE0ODA1YmFjZDBhMDhiNjRkZWUyMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl82M2U4ZTUzZGQ3Yjc0MjE4OGM4YWM4NDVjZmFkMzkwMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yODMyMTkwYzJjYmY0OTZlYWNhZTE1YjcwMTVhMGQxYyA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNi45ODIxMTggMjkuMzQzODgyIDE1Ljc5MjExMyAyOC45NjMyMDUgMTQuNjU2MzI5IEMgMjguNTgyNTI5IDEzLjUyMDU0NCAyOC4wMjAzIDEyLjQ1MzkxOCAyNy4yOTg0MTUgMTEuNDk3OTg3IEMgMjYuNTc2NTMgMTAuNTQyMDU3IDI1LjcwNDQ4MiA5LjcwOTM5NSAyNC43MTYyMzIgOS4wMzI0MjggQyAyMy43Mjc5ODMgOC4zNTU0NjEgMjIuNjM2NTI5IDcuODQzMDkzIDIxLjQ4NDM3NSA3LjUxNTI3NyBDIDIwLjMzMjIyMSA3LjE4NzQ2MSAxOS4xMzQ1MjEgNy4wNDg1MDkgMTcuOTM3OTE4IDcuMTAzODMxIEMgMTYuNzQxMzE0IDcuMTU5MTU0IDE1LjU2MTU0NCA3LjQwODAyMyAxNC40NDQ1NTIgNy44NDA3NDggQyAxMy4zMjc1NiA4LjI3MzQ3MyAxMi4yODgwMzggOC44ODQzNjIgMTEuMzY2NDY2IDkuNjQ5NjI1IEMgMTAuNDQ0ODk1IDEwLjQxNDg4OCA5LjY1MzM5NiAxMS4zMjQ0NjEgOS4wMjI3OTIgMTIuMzQyOTIgQyA4LjM5MjE4OSAxMy4zNjEzOCA3LjkzMDc3NCAxNC40NzUzMzMgNy42NTY1MTkgMTUuNjQxMzk3IEMgNy4zODIyNjMgMTYuODA3NDYxIDcuMjk4NzczIDE4LjAxMDMgNy40MDkyOTkgMTkuMjAzMDcyIEMgNy41MTk4MjYgMjAuMzk1ODQ0IDcuODIyOTE2IDIxLjU2Mjg2MSA4LjMwNjc2NiAyMi42NTg2NzcgQyA4Ljc5MDYxNiAyMy43NTQ0OTIgOS40NDg4NjIgMjQuNzY0NjkyIDEwLjI1NTg2OSAyNS42NDk5MzggQyAxMS4wNjI4NzcgMjYuNTM1MTgzIDEyLjAwODAzNCAyNy4yODM4MzEgMTMuMDU0NTMgMjcuODY2NzI1IEMgMTQuMTAxMDI3IDI4LjQ0OTYyIDE1LjIzNTEgMjguODU5MDk2IDE2LjQxMjU4NiAyOS4wNzkyMDYgQyAxNy41OTAwNzIgMjkuMjk5MzE2IDE4Ljc5NTQ4NCAyOS4zMjcxNjYgMTkuOTgxODc4IDI5LjE2MTY3MSBDIDIxLjE2ODI3MyAyOC45OTYxNzYgMjIuMzIwMDQ4IDI4LjYzOTUxMiAyMy4zOTIzNDggMjguMTA1NTcgTCAxOC40NSAxOC4xOCBMIDI5LjUzOCAxOC4xOCB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjMuMzkyMzQ4IDI4LjEwNTU3IEMgMjUuMjM4MjUyIDI3LjE4NjQxOSAyNi43OTE2NTkgMjUuNzcwMzAxIDI3Ljg3NzIwOCAyNC4wMTcwNzkgQyAyOC45NjI3NTcgMjIuMjYzODU4IDI5LjUzOCAyMC4yNDIwODYgMjkuNTM4IDE4LjE3OTk5OSBMIDE4LjQ1IDE4LjE4IEwgMjMuMzkyMzQ4IDI4LjEwNTU3IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfNjNlOGU1M2RkN2I3NDIxODhjOGFjODQ1Y2ZhZDM5MDIuc2V0SWNvbihkaXZfaWNvbl8yODMyMTkwYzJjYmY0OTZlYWNhZTE1YjcwMTVhMGQxYyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjQ1MmYxNTVhYTRhNDYzOGE1NTQ3NmU2ZTMwMWQwZWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JlYzBkYWFlZjgwNjQ3NzdiMWNhMTJkN2E3NjZmYzYwID0gJChgPGRpdiBpZD0iaHRtbF9iZWMwZGFhZWY4MDY0Nzc3YjFjYTEyZDdhNzY2ZmM2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjg8YnI+IFZvd2VsczogNjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNDUyZjE1NWFhNGE0NjM4YTU1NDc2ZTZlMzAxZDBlZS5zZXRDb250ZW50KGh0bWxfYmVjMGRhYWVmODA2NDc3N2IxY2ExMmQ3YTc2NmZjNjApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjNlOGU1M2RkN2I3NDIxODhjOGFjODQ1Y2ZhZDM5MDIuYmluZFBvcHVwKHBvcHVwX2Y0NTJmMTU1YWE0YTQ2MzhhNTU0NzZlNmUzMDFkMGVlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzMyZTM4ZmVlZmM3ZTQxMGY5MjZlYjJhZmFjMjlhZWNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNzA4MTgyLCAzOS41NDM0NTZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl85N2ZkOWEwNjFiYWM0ZjM1YjA2MjA4ZDRjYTljZjkyYSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNy4wMDA2OTYgMjkuMzQ5ODU2IDE1LjgyODkwOSAyOC45ODA2NzMgMTQuNzA4ODgyIEMgMjguNjExNDkgMTMuNTg4ODU0IDI4LjA2NTk3MyAxMi41MzQ4NjQgMjcuMzY0NzIgMTEuNTg2NzA3IEMgMjYuNjYzNDY3IDEwLjYzODU1MSAyNS44MTU0MTYgOS44MDgzMTMgMjQuODUyNTg5IDkuMTI3MzQzIEMgMjMuODg5NzYyIDguNDQ2MzczIDIyLjgyNDQzIDcuOTIzMzUgMjEuNjk2ODE5IDcuNTc4MDIzIEMgMjAuNTY5MjA4IDcuMjMyNjk2IDE5LjM5MzY5MSA3LjA2OTQ2NyAxOC4yMTQ2NTMgNy4wOTQ0OTggQyAxNy4wMzU2MTUgNy4xMTk1MjkgMTUuODY4MDg1IDcuMzMyNTAyIDE0Ljc1NjE0NiA3LjcyNTM3NSBDIDEzLjY0NDIwNyA4LjExODI0OCAxMi42MDIwMzMgOC42ODYwMTMgMTEuNjY4OTc1IDkuNDA3MjMzIEMgMTAuNzM1OTE2IDEwLjEyODQ1MyA5LjkyMzg2NSAxMC45OTM5MzUgOS4yNjM0ODUgMTEuOTcwOTk5IEMgOC42MDMxMDUgMTIuOTQ4MDY0IDguMTAyODEyIDE0LjAyNDI1NyA3Ljc4MTQ5NyAxNS4xNTg5NDMgQyA3LjQ2MDE4MiAxNi4yOTM2MyA3LjMyMTk0IDE3LjQ3MjM0NyA3LjM3MTk5MSAxOC42NTA1ODggQyA3LjQyMjA0MiAxOS44Mjg4MjkgNy42NTk3NDggMjAuOTkxNTc2IDguMDc2MTM0IDIyLjA5NDkyNSBDIDguNDkyNTE5IDIzLjE5ODI3NCA5LjA4MjI3NyAyNC4yMjgxNjMgOS44MjMxMzkgMjUuMTQ1NzAzIEMgMTAuNTY0MDAxIDI2LjA2MzI0MyAxMS40NDY1MjQgMjYuODU2NzQxIDEyLjQzNzM4NSAyNy40OTYyMzQgQyAxMy40MjgyNDYgMjguMTM1NzI3IDE0LjUxNDgxNiAyOC42MTMwNjQgMTUuNjU2MDY3IDI4LjkxMDIyMyBDIDE2Ljc5NzMxOCAyOS4yMDczODEgMTcuOTc4NzAzIDI5LjMyMDU3NCAxOS4xNTU2MTcgMjkuMjQ1NTI1IEMgMjAuMzMyNTMgMjkuMTcwNDc3IDIxLjQ4OTk2OSAyOC45MDgxNDUgMjIuNTg0MjMyIDI4LjQ2ODQzNCBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyMi41ODQyMzIgMjguNDY4NDM0IEMgMjQuNjM3NDQxIDI3LjY0MzM4NyAyNi4zOTc0MTcgMjYuMjIyMzA1IDI3LjYzNjUxNSAyNC4zODkwMDEgQyAyOC44NzU2MTMgMjIuNTU1Njk2IDI5LjUzOCAyMC4zOTI3NzQgMjkuNTM4IDE4LjE4IEwgMTguNDUgMTguMTggTCAyMi41ODQyMzIgMjguNDY4NDM0IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMzJlMzhmZWVmYzdlNDEwZjkyNmViMmFmYWMyOWFlY2Quc2V0SWNvbihkaXZfaWNvbl85N2ZkOWEwNjFiYWM0ZjM1YjA2MjA4ZDRjYTljZjkyYSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmFiNzljYzA3YzIyNDRjZjg0NmY2OWE0NDI4YjhmMzggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRhZGMxOGJjYjI2NDQwZTU4Yzc3MDdjZTc2ODZjMTVjID0gJChgPGRpdiBpZD0iaHRtbF80YWRjMThiY2IyNjQ0MGU1OGM3NzA3Y2U3Njg2YzE1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMzA8YnI+IFZvd2VsczogNzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82YWI3OWNjMDdjMjI0NGNmODQ2ZjY5YTQ0MjhiOGYzOC5zZXRDb250ZW50KGh0bWxfNGFkYzE4YmNiMjY0NDBlNThjNzcwN2NlNzY4NmMxNWMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMzJlMzhmZWVmYzdlNDEwZjkyNmViMmFmYWMyOWFlY2QuYmluZFBvcHVwKHBvcHVwXzZhYjc5Y2MwN2MyMjQ0Y2Y4NDZmNjlhNDQyOGI4ZjM4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzQ1NGQyMzZlNDM0NjQ0NTg5NzdlYzg3ZWQ2Y2I2ODdjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzNkOWM4MWViMjdjNGUwOTg3NWY5MDdlZGZmNzAyNDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl83N2FhYTQ3MWJjZGQ0ZjljODc5OGY1OTJlOTViNThiZSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgXHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjUzOCAxOC4xOCBDIDI5LjUzOCAxNi45MTM2NjQgMjkuMzIxMDYyIDE1LjY1NjYzNiAyOC44OTY2MTUgMTQuNDYzNTUyIEMgMjguNDcyMTY3IDEzLjI3MDQ2NyAyNy44NDY0NSAxMi4xNTg4NjUgMjcuMDQ2NjYgMTEuMTc3MDU5IEMgMjYuMjQ2ODcgMTAuMTk1MjU0IDI1LjI4NDc2MyA5LjM1NzY3OCAyNC4yMDIxNTggOC43MDA3MzcgQyAyMy4xMTk1NTIgOC4wNDM3OTYgMjEuOTMyMzYyIDcuNTc3MTQ2IDIwLjY5MjE4OCA3LjMyMTA3MSBDIDE5LjQ1MjAxNCA3LjA2NDk5NiAxOC4xNzcwODcgNy4wMjMyNTkgMTYuOTIyODIgNy4xOTc2NzUgQyAxNS42Njg1NTMgNy4zNzIwOTEgMTQuNDUzMzg1IDcuNzYwMDk1IDEzLjMzMDEzMSA4LjM0NDgyNCBDIDEyLjIwNjg3NyA4LjkyOTU1MyAxMS4xOTIwNTEgOS43MDI0MSAxMC4zMjk3NiAxMC42Mjk4MDUgQyA5LjQ2NzQ2OSAxMS41NTcyIDguNzcwMzkgMTIuNjI1NDk4IDguMjY4ODIgMTMuNzg4MjY4IEMgNy43NjcyNSAxNC45NTEwMzggNy40Njg1NjIgMTYuMTkxMTg2IDcuMzg1NzQgMTcuNDU0ODExIEMgNy4zMDI5MTggMTguNzE4NDM1IDcuNDM3MTc4IDE5Ljk4Njk2IDcuNzgyNjg1IDIxLjIwNTI1MSBDIDguMTI4MTkyIDIyLjQyMzU0MSA4LjY3OTg2NyAyMy41NzM2ODcgOS40MTM3MzIgMjQuNjA1Njk5IEMgMTAuMTQ3NTk3IDI1LjYzNzcxMSAxMS4wNTI4NjQgMjYuNTM2NDE4IDEyLjA5MDE4NSAyNy4yNjI3NTggQyAxMy4xMjc1MDcgMjcuOTg5MDk5IDE0LjI4MTYzNCAyOC41MzIzOTUgMTUuNTAyNDA1IDI4Ljg2OTAzMyBDIDE2LjcyMzE3NiAyOS4yMDU2NzEgMTcuOTkyNjQ0IDI5LjMzMDcwMyAxOS4yNTU2MzMgMjkuMjM4NjkzIEMgMjAuNTE4NjIyIDI5LjE0NjY4NCAyMS43NTY1NjUgMjguODM4OTg2IDIyLjkxNTY1NiAyOC4zMjg5NzMgQyAyNC4wNzQ3NDggMjcuODE4OTYgMjUuMTM3OTQ5IDI3LjExNDEzMSAyNi4wNTkwNDggMjYuMjQ1MTE4IEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI2LjA1OTA0OCAyNi4yNDUxMTggQyAyNy4xNTc2MzkgMjUuMjA4NjUxIDI4LjAzMjk2IDIzLjk1ODU2MiAyOC42MzExODEgMjIuNTcxNzMxIEMgMjkuMjI5NDAxIDIxLjE4NDkwMSAyOS41MzggMTkuNjkwMzUyIDI5LjUzOCAxOC4xNzk5OTkgTCAxOC40NSAxOC4xOCBMIDI2LjA1OTA0OCAyNi4yNDUxMTggelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl80NTRkMjM2ZTQzNDY0NDU4OTc3ZWM4N2VkNmNiNjg3Yy5zZXRJY29uKGRpdl9pY29uXzc3YWFhNDcxYmNkZDRmOWM4Nzk4ZjU5MmU5NWI1OGJlKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lMTg3N2VhYjFjYmU0N2QwYjIwNDE4Yzg5MjNkZTcxYiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGI3NGVjY2JjNzgwNDViNzg0MTU2NDg0NjcwZGY2YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzhiNzRlY2NiYzc4MDQ1Yjc4NDE1NjQ4NDY3MGRmNmMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiA0Nzxicj4gVm93ZWxzOiA3PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UxODc3ZWFiMWNiZTQ3ZDBiMjA0MThjODkyM2RlNzFiLnNldENvbnRlbnQoaHRtbF84Yjc0ZWNjYmM3ODA0NWI3ODQxNTY0ODQ2NzBkZjZjMyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80NTRkMjM2ZTQzNDY0NDU4OTc3ZWM4N2VkNmNiNjg3Yy5iaW5kUG9wdXAocG9wdXBfZTE4NzdlYWIxY2JlNDdkMGIyMDQxOGM4OTIzZGU3MWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDFiYmEzNGRiNmFlNGJhZGI4ZWI5OWMyZDAxZDY5MzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzczZDljODFlYjI3YzRlMDk4NzVmOTA3ZWRmZjcwMjQ0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fZmNlYzYwNzUxMWRjNGQzYThkMzkyNGRjMGNiOGVjNjAgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIFx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS41MzggMTguMTggQyAyOS41MzggMTYuODc2NDMgMjkuMzA4MTE3IDE1LjU4MzAxNSAyOC44NTg5MzEgMTQuMzU5MjgxIEMgMjguNDA5NzQ1IDEzLjEzNTU0NiAyNy43NDgyNTQgMTIuMDAwNTU4IDI2LjkwNDkwMiAxMS4wMDY1NSBDIDI2LjA2MTU0OSAxMC4wMTI1NDMgMjUuMDQ5NDc0IDkuMTc1MDAzIDIzLjkxNTI1NSA4LjUzMjQ3NiBDIDIyLjc4MTAzNiA3Ljg4OTk0OCAyMS41NDIzNDQgNy40NTI0NDQgMjAuMjU2MTg1IDcuMjQwMDk5IEMgMTguOTcwMDI3IDcuMDI3NzUzIDE3LjY1NjQ0MSA3LjA0Mzg3NCAxNi4zNzU4ODEgNy4yODc3MiBDIDE1LjA5NTMyMSA3LjUzMTU2NSAxMy44Njc3MzggNy45OTkzMzYgMTIuNzQ5NjI5IDguNjY5NTA1IEMgMTEuNjMxNTIgOS4zMzk2NzQgMTAuNjQwMzA0IDEwLjIwMTc5OSA5LjgyMTYgMTEuMjE2MjA0IEMgOS4wMDI4OTYgMTIuMjMwNjA5IDguMzY5NDU4IDEzLjM4MTQ4OSA3Ljk1MDQzOSAxNC42MTU4NzkgQyA3LjUzMTQyIDE1Ljg1MDI2OCA3LjMzMzM0OCAxNy4xNDg5MzUgNy4zNjUzMzkgMTguNDUyMTEyIEMgNy4zOTczMzEgMTkuNzU1MjkgNy42NTg4ODYgMjEuMDQyNjc0IDguMTM3OTY5IDIyLjI1NTAxNiBDIDguNjE3MDUxIDIzLjQ2NzM1OCA5LjMwNjE5NyAyNC41ODU3NzEgMTAuMTczNjg5IDI1LjU1ODc4MiBDIDExLjA0MTE4MiAyNi41MzE3OTMgMTIuMDczNTA2IDI3LjM0NDI0NCAxMy4yMjMxNTIgMjcuOTU4NzQyIEMgMTQuMzcyNzk4IDI4LjU3MzI0MSAxNS42MjE4NTQgMjguOTgwMjE0IDE2LjkxMjgzNiAyOS4xNjA5MzIgQyAxOC4yMDM4MTkgMjkuMzQxNjUgMTkuNTE2NjE0IDI5LjI5MzI5NyAyMC43OTA4MDQgMjkuMDE4MDk5IEMgMjIuMDY0OTk0IDI4Ljc0MjkgMjMuMjgwNzI3IDI4LjI0NTE0NCAyNC4zODIwNTMgMjcuNTQ3NzM3IEMgMjUuNDgzMzc4IDI2Ljg1MDMzIDI2LjQ1MzEzOCAyNS45NjQxMzkgMjcuMjQ2NzAxIDI0LjkyOTk0OCBMIDE4LjQ1IDE4LjE4IEwgMjkuNTM4IDE4LjE4IHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyNy4yNDY3MDEgMjQuOTI5OTQ4IEMgMjcuOTg0NjQ1IDIzLjk2ODI0MSAyOC41NTk5MSAyMi44OTE5OTYgMjguOTQ5NTYxIDIxLjc0NDEyMiBDIDI5LjMzOTIxMiAyMC41OTYyNDkgMjkuNTM4IDE5LjM5MjIwNyAyOS41MzggMTguMTgwMDAyIEwgMTguNDUgMTguMTggTCAyNy4yNDY3MDEgMjQuOTI5OTQ4IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMDFiYmEzNGRiNmFlNGJhZGI4ZWI5OWMyZDAxZDY5Mzguc2V0SWNvbihkaXZfaWNvbl9mY2VjNjA3NTExZGM0ZDNhOGQzOTI0ZGMwY2I4ZWM2MCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDBhZThkNDM1YjlmNGE4ZDllN2JiZmJmOGRjNmYzZWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2E4ZWQ4ZDAwNTIxZTQyNWNhZmNiZjJlYjZhZTcxODgxID0gJChgPGRpdiBpZD0iaHRtbF9hOGVkOGQwMDUyMWU0MjVjYWZjYmYyZWI2YWU3MTg4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogNDM8YnI+IFZvd2VsczogNTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kMGFlOGQ0MzViOWY0YThkOWU3YmJmYmY4ZGM2ZjNlYy5zZXRDb250ZW50KGh0bWxfYThlZDhkMDA1MjFlNDI1Y2FmY2JmMmViNmFlNzE4ODEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMDFiYmEzNGRiNmFlNGJhZGI4ZWI5OWMyZDAxZDY5MzguYmluZFBvcHVwKHBvcHVwX2QwYWU4ZDQzNWI5ZjRhOGQ5ZTdiYmZiZjhkYzZmM2VjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzY2MzM2MWFkNjRhOTQxOGJhMGJhMmRlZDNhOTA5OTk0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzY5OSwgLTEwMy45NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzUyYjRjZDYxNzNiMDRhYjNiZjcyZDNjODZmMzNjZWNhID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICBcdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuNTM4IDE4LjE4IEMgMjkuNTM4IDE3LjA0ODkzMiAyOS4zNjQ5MzIgMTUuOTI0NDkzIDI5LjAyNDgxNCAxNC44NDU3NzQgQyAyOC42ODQ2OTUgMTMuNzY3MDU1IDI4LjE4MTUxMiAxMi43NDY3MDEgMjcuNTMyNzU4IDExLjgyMDE4NCBDIDI2Ljg4NDAwNCAxMC44OTM2NjcgMjYuMDk3Mjg0IDEwLjA3MTg0OSAyNS4xOTk5NDcgOS4zODMyOTggQyAyNC4zMDI2MSA4LjY5NDc0NyAyMy4zMDUxNzYgOC4xNDc1MzYgMjIuMjQyMzE5IDcuNzYwNjg4IEMgMjEuMTc5NDYyIDcuMzczODQgMjAuMDYzNjQzIDcuMTUxODkgMTguOTMzNjUxIDcuMTAyNTUzIEMgMTcuODAzNjYgNy4wNTMyMTcgMTYuNjcyNzQyIDcuMTc3MDcyIDE1LjU4MDIxNCA3LjQ2OTgxNSBDIDE0LjQ4NzY4NiA3Ljc2MjU1NyAxMy40NDYzNTUgOC4yMjA3NTMgMTIuNDkyNDIyIDguODI4NDc2IEMgMTEuNTM4NDg4IDkuNDM2MTk5IDEwLjY4MzEzNiAxMC4xODYzMjMgOS45NTYwOTkgMTEuMDUyNzcxIEMgOS4yMjkwNjIgMTEuOTE5MjIgOC42Mzg4NjUgMTIuODkxODM2IDguMjA2MDI0IDEzLjkzNjgwNyBDIDcuNzczMTgyIDE0Ljk4MTc3OCA3LjUwMjc3MiAxNi4wODY4NTMgNy40MDQxOTMgMTcuMjEzNjE4IEMgNy4zMDU2MTQgMTguMzQwMzgyIDcuMzgwMDIyIDE5LjQ3NTYyNSA3LjYyNDgzIDIwLjU3OTg4MyBDIDcuODY5NjM4IDIxLjY4NDE0MSA4LjI4MTk3NiAyMi43NDQ0NjcgOC44NDc1MTEgMjMuNzI0MDAxIEMgOS40MTMwNDUgMjQuNzAzNTM1IDEwLjEyNTE0NSAyNS41OTA3OTMgMTAuOTU5MDU2IDI2LjM1NDkzMiBDIDExLjc5Mjk2OCAyNy4xMTkwNyAxMi43Mzg5MTMgMjcuNzUxMTMxIDEzLjc2NDAwOSAyOC4yMjkxNDEgQyAxNC43ODkxMDYgMjguNzA3MTUxIDE1Ljg4MTMzNCAyOS4wMjU1MDcgMTcuMDAyNzI2IDI5LjE3MzE0MSBDIDE4LjEyNDExOCAyOS4zMjA3NzUgMTkuMjYxNTI3IDI5LjI5NTk1NiAyMC4zNzU0MTIgMjkuMDk5NTQ4IEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDIwLjM3NTQxMiAyOS4wOTk1NDggQyAyMi45NDIwMTYgMjguNjQ2OTg2IDI1LjI2ODY3IDI3LjMwMzY5MiAyNi45NDM5MDEgMjUuMzA3MjI4IEMgMjguNjE5MTMzIDIzLjMxMDc2NSAyOS41MzggMjAuNzg2MTk3IDI5LjUzOCAxOC4xNzk5OTkgTCAxOC40NSAxOC4xOCBMIDIwLjM3NTQxMiAyOS4wOTk1NDggelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl82NjMzNjFhZDY0YTk0MThiYTBiYTJkZWQzYTkwOTk5NC5zZXRJY29uKGRpdl9pY29uXzUyYjRjZDYxNzNiMDRhYjNiZjcyZDNjODZmMzNjZWNhKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jYWIwZDdmOWM4Zjc0YjQ2YjM5MDBjYjUxODI0NmY2YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmQ4M2M1NjE3ZjJkNDBmNzhiNDU3MjQyNzUxNGEzNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzJkODNjNTYxN2YyZDQwZjc4YjQ1NzI0Mjc1MTRhMzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyODxicj4gVm93ZWxzOiA4PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NhYjBkN2Y5YzhmNzRiNDZiMzkwMGNiNTE4MjQ2ZjZhLnNldENvbnRlbnQoaHRtbF8yZDgzYzU2MTdmMmQ0MGY3OGI0NTcyNDI3NTE0YTM2Mik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl82NjMzNjFhZDY0YTk0MThiYTBiYTJkZWQzYTkwOTk5NC5iaW5kUG9wdXAocG9wdXBfY2FiMGQ3ZjljOGY3NGI0NmIzOTAwY2I1MTgyNDZmNmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmIwY2I3NTllM2JjNDlmZGI0OTBmZWJlODlmOWI1NmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF83M2Q5YzgxZWIyN2M0ZTA5ODc1ZjkwN2VkZmY3MDI0NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzU0ZjEzNWJlZGU5MzQ2MjFhZTRiNDQ2YjU2OTk0NDcxID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICBcdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuNTM4IDE4LjE4IEMgMjkuNTM4IDE2LjIzMzc5NCAyOS4wMjU1OTIgMTQuMzIxNDYzIDI4LjA1MjQ5IDEyLjYzNiBDIDI3LjA3OTM4NyAxMC45NTA1MzYgMjUuNjc5NDYzIDkuNTUwNjEzIDIzLjk5NCA4LjU3NzUxIEMgMjIuMzA4NTM2IDcuNjA0NDA3IDIwLjM5NjIwNSA3LjA5MiAxOC40NDk5OTkgNy4wOTIgQyAxNi41MDM3OTQgNy4wOTIgMTQuNTkxNDYzIDcuNjA0NDA4IDEyLjkwNTk5OSA4LjU3NzUxMSBDIDExLjIyMDUzNiA5LjU1MDYxNCA5LjgyMDYxMyAxMC45NTA1MzcgOC44NDc1MSAxMi42MzYwMDEgQyA3Ljg3NDQwNyAxNC4zMjE0NjQgNy4zNjIgMTYuMjMzNzk1IDcuMzYyIDE4LjE4MDAwMSBDIDcuMzYyIDIwLjEyNjIwNyA3Ljg3NDQwOCAyMi4wMzg1MzggOC44NDc1MTEgMjMuNzI0MDAxIEMgOS44MjA2MTQgMjUuNDA5NDY1IDExLjIyMDUzOCAyNi44MDkzODggMTIuOTA2MDAxIDI3Ljc4MjQ5IEwgMTguNDUgMTguMTggTCAyOS41MzggMTguMTggelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDEyLjkwNjAwMSAyNy43ODI0OSBDIDE0LjU5MTQ2NSAyOC43NTU1OTMgMTYuNTAzNzk2IDI5LjI2OCAxOC40NTAwMDIgMjkuMjY4IEMgMjAuMzk2MjA3IDI5LjI2OCAyMi4zMDg1MzggMjguNzU1NTkyIDIzLjk5NDAwMSAyNy43ODI0ODkgQyAyNS42Nzk0NjUgMjYuODA5Mzg2IDI3LjA3OTM4OCAyNS40MDk0NjIgMjguMDUyNDkxIDIzLjcyMzk5OCBDIDI5LjAyNTU5MyAyMi4wMzg1MzUgMjkuNTM4IDIwLjEyNjIwNCAyOS41MzggMTguMTc5OTk4IEwgMTguNDUgMTguMTggTCAxMi45MDYwMDEgMjcuNzgyNDkgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl8yYjBjYjc1OWUzYmM0OWZkYjQ5MGZlYmU4OWY5YjU2ZC5zZXRJY29uKGRpdl9pY29uXzU0ZjEzNWJlZGU5MzQ2MjFhZTRiNDQ2YjU2OTk0NDcxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mNzljNjYyZDk1OWI0MjU5OTFlZGQwOGQwYjM3MDZmMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzJiODQzMmI2MGZmNGZkOWEyOGE1MTk1NjdkM2NlYzQgPSAkKGA8ZGl2IGlkPSJodG1sXzcyYjg0MzJiNjBmZjRmZDlhMjhhNTE5NTY3ZDNjZWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyMDxicj4gVm93ZWxzOiAxMDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNzljNjYyZDk1OWI0MjU5OTFlZGQwOGQwYjM3MDZmMi5zZXRDb250ZW50KGh0bWxfNzJiODQzMmI2MGZmNGZkOWEyOGE1MTk1NjdkM2NlYzQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMmIwY2I3NTllM2JjNDlmZGI0OTBmZWJlODlmOWI1NmQuYmluZFBvcHVwKHBvcHVwX2Y3OWM2NjJkOTU5YjQyNTk5MWVkZDA4ZDBiMzcwNmYyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7f482157bfd0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = folium.Map(location=(0,0), zoom_start=2)\n",
    "\n",
    "for i, coord in enumerate(data.coordinates):\n",
    "    marker = folium.Marker(coord)\n",
    "    icon = folium.DivIcon(html=plots[i])\n",
    "    marker.add_child(icon)\n",
    "    popup = folium.Popup(\n",
    "        'Consonants: {}<br>\\nVowels: {}'.format(data.consonants[i], data.vowels[i])\n",
    "    )\n",
    "    marker.add_child(popup)\n",
    "    m.add_child(marker)\n",
    "m.get_root().add_child(legend)\n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
